/**
	* Copyright (c) minuteproject, minuteproject@gmail.com
	* All rights reserved.
	* 
	* Licensed under the Apache License, Version 2.0 (the "License")
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	* 
	* http://www.apache.org/licenses/LICENSE-2.0
	* 
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
	* 
	* More information on minuteproject:
	* twitter @minuteproject
	* wiki http://minuteproject.wikispaces.com 
	* blog http://minuteproject.blogspot.net
	* 
*/
/**
	* template reference : 
	* - name : OpenxavaDomainObjectUML
	* - file name : DomainObjectUMLJPAAnnotationOXAnnotationV4.vm
*/
package sistema_oficial.sistema_oficial.domain.sistemaoficial;

//MP-MANAGED-ADDED-AREA-BEGINNING @import@
//MP-MANAGED-ADDED-AREA-ENDING @import@
import java.sql.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;

import javax.persistence.*;
import org.openxava.annotations.*;

import sistema_oficial.sistema_oficial.domain.sistemaoficial.AlternativaProveedor;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleCompra;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleOrdenEntrada;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.SubcuentaMayor;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.Empaque;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.MateriaPrima;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.Producto;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.Paquete;

/**
 *
 * <p>Title: BienServicio</p>
 *
 * <p>Description: Domain Object describing a BienServicio entity</p>
 *
 */
@Entity (name="BienServicio")
@Table (name="bien_servicio")
@Views({
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @view-base-bien_servicio@
	@View(
		name="base",
		members=
        "" 	
        + "identificador  ; "
        + "descripcion  ; "
        + "codigo  ; "
        + "subcuentaMayorCodigo  ; "
        + "esEmpaque  ; "
        + "empaqueIdentificador  ; "
        + "esMateriaPrima  ; "
        + "materiaPrimaIdentificador  ; "
        + "esProducto  ; "
        + "productoIdentificador  ; "
        + "esPaquete  ; "
        + "paqueteIdentificador  ; "
		),
//MP-MANAGED-UPDATABLE-ENDING
	@View(
		name="Create", 
		extendsView="base"
	),
	@View(
		name="Update", 
		extendsView="base",
        members=
          "" 	
	    + "alternativaProveedor { alternativaProveedorBienServicioViaBienServicioIdentificador };" 
	    + "detalleCompra { detalleCompraBienServicioViaBienServicioIdentificador };" 
	    + "detalleOrdenEntrada { detalleOrdenEntradaBienServicioViaBienServicioIdentificador };" 
	),
	@View(extendsView="base",
        members=
          "" 	
	    ),
    @View(name="bienServicioDEFAULT_VIEW", 
	   members=
          " identificador ;" 	
        + "descripcion  ; "
        + "codigo  ; "
        + "esEmpaque  ; "
        + "esMateriaPrima  ; "
        + "esProducto  ; "
        + "esPaquete  ; "
	),
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @view-reference-bien_servicio@
    @View(name="reference", 
       extendsView="bienServicioDEFAULT_VIEW"
//MP-MANAGED-UPDATABLE-ENDING
    )
})

@Tabs({
@Tab(
properties=
     " descripcion "
    +",  codigo "
    +",  esEmpaque "
    +",  esMateriaPrima "
    +",  esProducto "
    +",  esPaquete "
)
,
@Tab(
name = "BienServicioTab",
properties=
     " descripcion "
    +",  codigo "
    +",  esEmpaque "
    +",  esMateriaPrima "
    +",  esProducto "
    +",  esPaquete "
)
,
@Tab(
name = "BienServicioTabWithRef",
properties=
     " descripcion "
    +",  codigo "
    +",  esEmpaque "
    +",  esMateriaPrima "
    +",  esProducto "
    +",  esPaquete "
)
})
//MP-MANAGED-ADDED-AREA-BEGINNING @class-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @class-annotation@
public class BienServicio {

    @Hidden @Id @Column(name="identificador" )
    private Integer identificador; 

//MP-MANAGED-ADDED-AREA-BEGINNING @descripcion-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @descripcion-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-descripcion@
    @Column(name="descripcion",  length=100, nullable=false,  unique=false)
    @Required
    private String descripcion;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @codigo-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @codigo-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-codigo@
    @Column(name="codigo",  length=50,  nullable=true,  unique=false)
    private String codigo;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @es_empaque-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @es_empaque-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-es_empaque@
    @Column(name="es_empaque",   nullable=false,  unique=false)
    @Required
    private Boolean esEmpaque;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @es_materia_prima-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @es_materia_prima-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-es_materia_prima@
    @Column(name="es_materia_prima",   nullable=false,  unique=false)
    @Required
    private Boolean esMateriaPrima;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @es_producto-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @es_producto-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-es_producto@
    @Column(name="es_producto",   nullable=false,  unique=false)
    @Required
    private Boolean esProducto;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @es_paquete-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @es_paquete-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-es_paquete@
    @Column(name="es_paquete",   nullable=false,  unique=false)
    @Required
    private Boolean esPaquete;	
//MP-MANAGED-UPDATABLE-ENDING


//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-SubcuentaMayor-bien_servicio@
    @ManyToOne (fetch=FetchType.LAZY ,optional=false) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="subcuenta_mayor_codigo", nullable=false,  unique=false  )
    @ReferenceView ("reference") 
    private SubcuentaMayor subcuentaMayorCodigo; 
    
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-Empaque-bien_servicio@
    @ManyToOne (fetch=FetchType.LAZY ) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="empaque_identificador",  nullable=true,  unique=false  )
    @ReferenceView ("reference") 
    private Empaque empaqueIdentificador; 
    
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-MateriaPrima-bien_servicio@
    @ManyToOne (fetch=FetchType.LAZY ) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="materia_prima_identificador",  nullable=true,  unique=false  )
    @ReferenceView ("reference") 
    private MateriaPrima materiaPrimaIdentificador; 
    
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-Producto-bien_servicio@
    @ManyToOne (fetch=FetchType.LAZY ) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="producto_identificador",  nullable=true,  unique=false  )
    @ReferenceView ("reference") 
    private Producto productoIdentificador; 
    
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-Paquete-bien_servicio@
    @ManyToOne (fetch=FetchType.LAZY ) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="paquete_identificador",  nullable=true,  unique=false  )
    @ReferenceView ("reference") 
    private Paquete paqueteIdentificador; 
    
//MP-MANAGED-UPDATABLE-ENDING
//children
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-alternativaProveedorBienServicioViaBienServicioIdentificador-bien_servicio@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.AlternativaProveedor.class, fetch=FetchType.LAZY, mappedBy="bienServicioIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <AlternativaProveedor> alternativaProveedorBienServicioViaBienServicioIdentificador = new HashSet<AlternativaProveedor>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleCompraBienServicioViaBienServicioIdentificador-bien_servicio@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleCompra.class, fetch=FetchType.LAZY, mappedBy="bienServicioIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleCompra> detalleCompraBienServicioViaBienServicioIdentificador = new HashSet<DetalleCompra>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleOrdenEntradaBienServicioViaBienServicioIdentificador-bien_servicio@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleOrdenEntrada.class, fetch=FetchType.LAZY, mappedBy="bienServicioIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleOrdenEntrada> detalleOrdenEntradaBienServicioViaBienServicioIdentificador = new HashSet<DetalleOrdenEntrada>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//m2m
    /**
    * Default constructor
    */
    public BienServicio() {
    }


    public Integer getIdentificador() {
        return identificador;
    }
	
    public void setIdentificador (Integer identificador) {
        this.identificador =  identificador;
    }
    

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-descripcion@
    public String getDescripcion() {
        return descripcion;
    }
	
    public void setDescripcion (String descripcion) {
        this.descripcion =  descripcion;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-codigo@
    public String getCodigo() {
        return codigo;
    }
	
    public void setCodigo (String codigo) {
        this.codigo =  codigo;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-es_empaque@
    public Boolean getEsEmpaque() {
        return esEmpaque;
    }
	
    public void setEsEmpaque (Boolean esEmpaque) {
        this.esEmpaque =  esEmpaque;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-es_materia_prima@
    public Boolean getEsMateriaPrima() {
        return esMateriaPrima;
    }
	
    public void setEsMateriaPrima (Boolean esMateriaPrima) {
        this.esMateriaPrima =  esMateriaPrima;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-es_producto@
    public Boolean getEsProducto() {
        return esProducto;
    }
	
    public void setEsProducto (Boolean esProducto) {
        this.esProducto =  esProducto;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-es_paquete@
    public Boolean getEsPaquete() {
        return esPaquete;
    }
	
    public void setEsPaquete (Boolean esPaquete) {
        this.esPaquete =  esPaquete;
    } 
//MP-MANAGED-UPDATABLE-ENDING


    public SubcuentaMayor getSubcuentaMayorCodigo () {  //
    	return subcuentaMayorCodigo;
    }
	
    public void setSubcuentaMayorCodigo (SubcuentaMayor subcuentaMayorCodigo) {
    	this.subcuentaMayorCodigo = subcuentaMayorCodigo;//this.subcuentaMayorCodigo = subcuentaMayor;
    }
    public Empaque getEmpaqueIdentificador () {  //
    	return empaqueIdentificador;
    }
	
    public void setEmpaqueIdentificador (Empaque empaqueIdentificador) {
    	this.empaqueIdentificador = empaqueIdentificador;//this.empaqueIdentificador = empaque;
    }
    public MateriaPrima getMateriaPrimaIdentificador () {  //
    	return materiaPrimaIdentificador;
    }
	
    public void setMateriaPrimaIdentificador (MateriaPrima materiaPrimaIdentificador) {
    	this.materiaPrimaIdentificador = materiaPrimaIdentificador;//this.materiaPrimaIdentificador = materiaPrima;
    }
    public Producto getProductoIdentificador () {  //
    	return productoIdentificador;
    }
	
    public void setProductoIdentificador (Producto productoIdentificador) {
    	this.productoIdentificador = productoIdentificador;//this.productoIdentificador = producto;
    }
    public Paquete getPaqueteIdentificador () {  //
    	return paqueteIdentificador;
    }
	
    public void setPaqueteIdentificador (Paquete paqueteIdentificador) {
    	this.paqueteIdentificador = paqueteIdentificador;//this.paqueteIdentificador = paquete;
    }

    public Set<AlternativaProveedor> getAlternativaProveedorBienServicioViaBienServicioIdentificador() {
        if (alternativaProveedorBienServicioViaBienServicioIdentificador == null){
            alternativaProveedorBienServicioViaBienServicioIdentificador = new HashSet<AlternativaProveedor>();
        }
        return alternativaProveedorBienServicioViaBienServicioIdentificador;
    }

    public void setAlternativaProveedorBienServicioViaBienServicioIdentificador (Set<AlternativaProveedor> alternativaProveedorBienServicioViaBienServicioIdentificador) {
        this.alternativaProveedorBienServicioViaBienServicioIdentificador = alternativaProveedorBienServicioViaBienServicioIdentificador;
    }	
    
    public void addAlternativaProveedorBienServicioViaBienServicioIdentificador (AlternativaProveedor alternativaProveedor) {
    	    getAlternativaProveedorBienServicioViaBienServicioIdentificador().add(alternativaProveedor);
    }
    
    public Set<DetalleCompra> getDetalleCompraBienServicioViaBienServicioIdentificador() {
        if (detalleCompraBienServicioViaBienServicioIdentificador == null){
            detalleCompraBienServicioViaBienServicioIdentificador = new HashSet<DetalleCompra>();
        }
        return detalleCompraBienServicioViaBienServicioIdentificador;
    }

    public void setDetalleCompraBienServicioViaBienServicioIdentificador (Set<DetalleCompra> detalleCompraBienServicioViaBienServicioIdentificador) {
        this.detalleCompraBienServicioViaBienServicioIdentificador = detalleCompraBienServicioViaBienServicioIdentificador;
    }	
    
    public void addDetalleCompraBienServicioViaBienServicioIdentificador (DetalleCompra detalleCompra) {
    	    getDetalleCompraBienServicioViaBienServicioIdentificador().add(detalleCompra);
    }
    
    public Set<DetalleOrdenEntrada> getDetalleOrdenEntradaBienServicioViaBienServicioIdentificador() {
        if (detalleOrdenEntradaBienServicioViaBienServicioIdentificador == null){
            detalleOrdenEntradaBienServicioViaBienServicioIdentificador = new HashSet<DetalleOrdenEntrada>();
        }
        return detalleOrdenEntradaBienServicioViaBienServicioIdentificador;
    }

    public void setDetalleOrdenEntradaBienServicioViaBienServicioIdentificador (Set<DetalleOrdenEntrada> detalleOrdenEntradaBienServicioViaBienServicioIdentificador) {
        this.detalleOrdenEntradaBienServicioViaBienServicioIdentificador = detalleOrdenEntradaBienServicioViaBienServicioIdentificador;
    }	
    
    public void addDetalleOrdenEntradaBienServicioViaBienServicioIdentificador (DetalleOrdenEntrada detalleOrdenEntrada) {
    	    getDetalleOrdenEntradaBienServicioViaBienServicioIdentificador().add(detalleOrdenEntrada);
    }
    



//MP-MANAGED-ADDED-AREA-BEGINNING @implementation@
//MP-MANAGED-ADDED-AREA-ENDING @implementation@

}
